package br.com.bomsabor.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashSet;
import java.util.Set;

import br.com.bomsabor.model.ItemProduto;

public class ImplItemProdutoDAO implements ItemProdutoDAO {

	public ItemProduto incluir(ItemProduto i) {
		String sql = "INSERT INTO ItemProduto (nomeItemProd, descricaoItemProd, valorItemProd) " +
		"VALUES (?, ?, ?)";
		Connection con = GenericDAO.getConnection();
		
		try {
			PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
			ps.setString(1, i.getNomeItemProduto());
			ps.setString(2, i.getDescricaoItemProduto());
			ps.setDouble(3, i.getValorUnitario());
			ps.executeUpdate();
			
			ResultSet rs = ps.getGeneratedKeys();
			rs.next();
			i.setCodItemProduto(rs.getInt(1));
						
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return i;
	}

	public void alterar(ItemProduto i) {
		String sql = "UPDATE ItemProduto SET nomeItemProd = ?, descricaoItemProd = ?, valorItemProd = ? " +
		"WHERE codItemProd = ?";
		Connection con = GenericDAO.getConnection();
		PreparedStatement ps;
		try {
			ps = con.prepareStatement(sql);
		
			ps.setString(1, i.getNomeItemProduto());
			ps.setString(2, i.getDescricaoItemProduto());
			ps.setDouble(3, i.getValorUnitario());
			ps.setLong(4, i.getCodItemProduto());
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void excluir(ItemProduto i) {
		String sql = "DELETE ItemProduto WHERE codItemProd = ?";
		Connection con = GenericDAO.getConnection();
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setLong(1, i.getCodItemProduto());
			ps.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

	public ItemProduto pesquisar(String nomeItemProduto) {
		String sql = "SELECT * FROM ItemProduto WHERE UPPER(nomeItemProd) LIKE'%' + UPPER(?) + '%'";
		ItemProduto i = null;
		Connection con = GenericDAO.getConnection();
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setString(1, nomeItemProduto);
			ResultSet rs = ps.executeQuery();
			
			if(rs.next()){
				i = new ItemProduto();
				i.setCodItemProduto(rs.getLong("codItemProd"));
				i.setNomeItemProduto(rs.getString("nomeItemProd"));
				i.setDescricaoItemProduto(rs.getString("DescricaoItemProd"));
				i.setValorUnitario(rs.getDouble("ValorItemProd"));
				
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return i;
		
	}

	public ItemProduto pesquisar(long codItemProduto) {
		String sql = "SELECT * FROM ItemProduto WHERE codItemProd = ?";
		ItemProduto i = null;
		Connection con = GenericDAO.getConnection();
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setLong(1, codItemProduto);
			ResultSet rs = ps.executeQuery();
			
			if(rs.next()){
				i = new ItemProduto();
				i.setCodItemProduto(codItemProduto);
				i.setNomeItemProduto(rs.getString("nomeItemProd"));
				i.setDescricaoItemProduto(rs.getString("DescricaoItemProd"));
				i.setValorUnitario(rs.getDouble("ValorItemProd"));
				
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return i;
	}
	
	public Set<ItemProduto> todos() {
		String sql = "SELECT * FROM ItemProduto";
		Set<ItemProduto> lista = new HashSet<ItemProduto>();
		Connection con = GenericDAO.getConnection();
		try {
			PreparedStatement ps = con.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();
			
			while(rs.next()){
				ItemProduto i = new ItemProduto();
				i.setCodItemProduto(rs.getLong("codItemProd"));
				i.setNomeItemProduto(rs.getString("nomeItemProd"));
				i.setDescricaoItemProduto(rs.getString("DescricaoItemProd"));
				i.setValorUnitario(rs.getDouble("ValorItemProd"));
				lista.add(i);				
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return lista;
	}

}
